Metadata damage detected

文章目录

1. 故障现场

  • 通过监控发现集群状态是 HEALTH_ERR 状态, 并且发现 mds0: Metadata damage detected。 顾名思义,猜测应该是元信息损坏导致的。 image.png

2. 分析 damage 是啥原因导致

image.png

大概意思是:

  • 从元数据存储池读取时,遇到了元数据损坏或丢失的情况。这条消息表明损坏之处已经被妥善隔离了,以使 MDS 继续运作,如此一来,若有客户端访问损坏的子树就返回 IO 错误。关于损坏的细节信息可用 damage ls 管理套接字命令获取。只要一遇到受损元数据,此消息就会立即出现。

3. 查看 damage ls

  • 通过指令查询到 damage ls 显示的信息,可以发现里面有个 ino 编号。 image.png

4. 通过转换拿到十六进制 ino

  • 通过 ino:1099519182934 -> ino: 10000734856 image.png

5. 检查是否属于目录(10000734856)

  • 通过指令查找发现该 ino 确定是目录 image.png

6. 确定目录名

image.png

7. 该目录下面的所有文件

image.png

8. 查看 fs 挂载的目录是否匹配

ceph fs ls -f json-pretty

9. 修复这个目录元信息

ceph --admin-daemon /var/run/ceph/ceph-mds.00.asok  scrub_path /dir repair

image.png

10. 跟踪代码

参考文件:

image.pngimage.png

11. 总结

11.1 问题过程回顾

  • 集群 ERR
  • 发现 mds0: Metadata damage detected
  • 查看 damage ino
  • 根据 ino 定位跟踪目录
  • 根据目录名知道业务存储的数据
  • 修复问题

12. 修复方案

12.1 方案一:删除 ino 对应的目录(生产环境实战演练过)

1.业务方备份迁移数据 2.查看 damage ls image.png3.检查该 ino 确实没有对应的目录 image.png4.删除 damage rm 信息 image.png

5.检查集群状态(集群状态从 ERR 恢复到 WARN) image.png

12.2 方案二:修复该目录元信息

1.通过指令修复目录

ceph --admin-daemon /var/run/ceph/ceph-mds.ceph-newpublic-osd02.py.asok scrub_path /dir/xxx repair